package 算法.LeetCode91.每日打卡题目;

import java.util.Arrays;

/**
 * @author: 谢君臣
 * @create: 2021-02-02 18:00
 * @founction: XXXX
 * 给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。
 * 输入: S = "loveleetcode", C = 'e'
 * 输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]
 * - 字符串 S 的长度范围为 [1, 10000]。
 * - C 是一个单字符，且保证是字符串 S 里的字符。
 * - S 和 C 中的所有字母均为小写字母。
 */
public class day02 {
    public static void main(String[] args) {
        int[] ints = shortestToChar("loveleetcode", 'o');
        System.out.println(Arrays.toString(ints));
    }

    public static int[] shortestToChar(String S, char C) {
        int[] arrays = new int[S.length()];
        // char[] s = S.toCharArray();
        int i = 0;
        while (i < S.length()) {
            if (S.charAt(i) == C) {
                arrays[i] = 0;
                int j = i - 1;
                while (j >= 0 && S.charAt(j) != C) {  // 左面
                    arrays[j] = arrays[j] == 0 ? i - j : Math.min(i - j, arrays[j]);
                    j--;
                }
                j = i + 1;
                while (j <= S.length() - 1 && S.charAt(j) != C) { // 右边
                    arrays[j] = arrays[j] == 0 ? j - i : Math.min(j - 1, arrays[j]);
                    j++;
                }
            }
            i++;
        }
        return arrays;
    }
}
